# 原子级上下文工程

class AtomCe(object):
    def __init__(self):
        self.name = 'apps.cpm.ce.atom_ce.AtomCe'

    @staticmethod
    def generate(query:str) -> str:
        role = '雷达设计师'
        task = '研究雷达信噪比与距离之间的关系'
        requirements = [
            '采用标准符号表示，并采用常用单位'
        ]
        steps = [
            '选择适合的雷达方程',
            '获取用户请求中的相关参数',
            '生成json格式输出'
        ]
        output_format = 'json格式'
        prompt = '''
假设一个工作频率为$5.6\\times 10^{9}\\text{Hz}$，天线增益为45.0dB，有效噪声温度为290.0K，带宽为$5.0\\times 10^{6}\\text{Hz}$，噪声系数为3.0dB，系统损耗为6.0dB，计算25Km到165Km范围内，分为1000个距离单元，对每个距离单元分别计算：1. 雷达截面积rCS分别为：$0.1\\text{m}^{2}$、$0.01\\text{m}^{2}$、$1.0\text{m}^{2}$时，信噪比与距离之间的关系并绘制曲线；2. 雷达的峰值功率分别为：$1.5\\times 10^{6} \\text{W}$、$0.6\\times 10^{6}\\text{W}$、$2.7\\times 10^{6}\\text{W}$时，信噪比与距离之间的关系并绘制曲线；
'''
        params_json = {
            'freq': 5.6e9,
            'g': 45.0,
            'te': 290.0,
            'b': 5.0e6,
            'nf': 3.0,
            'loss': 6.0,
            'pt': [1.5e6, 0.6e6, 2.7e6],
            'sigma': [0.1, 0.01, 1.0],
            'ranges': [25e3, 165e3, 1000]
        }
        demos = [
            [prompt, params_json]
        ]
        current_input = query
        atom_prompt = f'''假设你是{role}，正在进行{task}。
**要求如下：**
'''
        for req in requirements:
            atom_prompt = f'{atom_prompt}{req}'
        atom_prompt = f'{atom_prompt}\n**采取如下步骤：**'
        for step in steps:
            atom_prompt = f'{atom_prompt}\n{step}'
        atom_prompt = f'{atom_prompt}\n**输出格式：**\n{output_format}\n**示例：**'
        for idx in range(len(demos)):
            atom_prompt = f'{atom_prompt}\n示例{idx+1}：\n输入：{demos[idx][0]}输出：{demos[idx][1]}'
        atom_prompt = f'{atom_prompt}\n**用户输入：**{query}'
        return atom_prompt

